//////////////////////////////////////////////////////////////////////////

#ifndef _SCREEN_H_
#define _SCREEN_H_

#ifndef _LAYER_H_
#include "layer.h"
#endif

#ifndef _INPUT_H_
#include "input.h"
#endif

#include <vector>

struct SDL_Surface;

class GUI_Screen : public Observer
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////

    virtual ~GUI_Screen();
    
    virtual void Resize() = 0;
    virtual void Render(SDL_Surface *_mainSurface) = 0;

//////////////////////////////////////////////////////////////////////////

protected:

//////////////////////////////////////////////////////////////////////////

    std::vector<GUI_Layer *> m_Layers;

////////////////////////////////////////////////////////////////////////////////
//// Observer interface implementation
////////////////////////////////////////////////////////////////////////////////


    /** Notify observer about event */
    virtual void OnEvent( Event _event, Observable* _observable );


////////////////////////////////////////////////////////////////////////////////


    /** Key change handler */
    virtual void OnKeyChanged(Input* _input) = 0;


    /** Mouse position change handler */
    virtual void OnMousePositionChanged(Input* _input) = 0;


////////////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
